/********************************************************************************
* @File name: systick.c
* @Author: Loganx
* @Gitee: https://gitee.com/loganxiang/lgxsmartcar
* @Version: 1.0(2025-10-09)
* @Description: STC32G单片机系统定时系统
********************************************************************************
* 本软件使用了STC的STC32G官方库
********************************************************************************/
#include "Lib/Config.h"
#include "Lib/STC32G_Timer.h"
#include "Lib/STC32G_NVIC.h"
#include "systick.h"
#include "tty.h"
#include "led.h"
#include "breathled.h"
#include "stepmotor.h"

unsigned long systick;

void SystickInit(void){
	TIM_InitTypeDef timer;
	
	timer.TIM_Mode = TIM_16BitAutoReload;
	timer.TIM_ClkSource = TIM_CLOCK_1T;
	timer.TIM_ClkOut = DISABLE;
	timer.TIM_Value = (u16)(65536UL - (MAIN_Fosc / 1000UL));			//1ms Timer
	timer.TIM_Run = ENABLE;
	
	Timer_Inilize(Timer0,&timer); 
	
	NVIC_Timer0_Init(ENABLE,Priority_2);
	
	systick = 0;
}
void Systick1ms(void){
	SystickCallbackStepMotor();
    // TODO: 在此处添加用户代码
}
void Systick10ms(void){
	SystickCallbackUART1();
    // TODO: 在此处添加用户代码
}
void Systick20ms(void){
	SystickCallbackBLED();
    // TODO: 在此处添加用户代码
}
void Systick50ms(void){
    // TODO: 在此处添加用户代码
}
void Systick100ms(void){
	//SystickCallbackLED();
	//SystickCallbackJoys();
	//SystickCallbackASR();
	//SystickCallbackMotor();
    // TODO: 在此处添加用户代码
}
void Systick200ms(void){
    // TODO: 在此处添加用户代码
}
void Systick500ms(void){
	SystickCallbackTTY();
    // TODO: 在此处添加用户代码
}
void Systick1s(void){
	systick++;
	
	SystickCallbackTTYEchot();
    // TODO: 在此处添加用户代码
}

void Timer0CallbackSystick(void){
	static unsigned int i = 0;
	
	if(++i > 1000){
		i = 0;
		Systick1ms();
		Systick500ms();
		Systick1s();
	}
	if(i % 10 == 0)
		Systick10ms();
	if(i % 20 == 0)
		Systick20ms();
	if(i % 50 == 0)
		Systick50ms();
	if(i % 100 == 0)
		Systick100ms();
	if(i % 200 == 0)
		Systick200ms();
	if(i == 500)
		Systick500ms();
}